import { TemplateRef } from '@angular/core'
import { Observable, Subject } from 'rxjs'

export enum HoverType {
  Normal = 0,
  Active = 1,
  Error = 2,
}

export interface IBaseInfoColumn {
  label: string // label
  /**
   * I18N key of the label
   */
  labelI18n?: string
  index?: string // key, 当 operate 为 true 时，index 不需要传
  value?: string | boolean | number | string[] // 静态显示值
  asyncValue?: Observable<string> // 异步静态显示值
  type?: string // 用种类来判断日期
  span: number // 宽度值，总共 24, 每次调用自己去算好，这个组件不做自动排版布局，因为情况太多了
  color?: string // todo
  operate?: boolean // 是否是操作内容，如果 true, 则 index 无效 //see whether i can use this key to control the display and edit template
  template?: TemplateRef<any>
  displayTemplate?: TemplateRef<any> // 非编辑状态下的template
  hover?: HoverType
  id?: number
  disEditable?: boolean // 不可编辑
  asyncDisEditable?: Subject<boolean> // 异步不可编辑
  pipe?: (any) => any // 自定义解析数据方法
  displayValue?: string // 用于纯展示数据,和 value 不同的是, displayValue 不会参与数值的传递, 比如取出来传到后端去,它只会纯展示.
  validator?: {
    funcs?: any[],
    errorTips?: string[],
    isError?: boolean,
    currentErrorTip?: string

  }// 编辑时的字段校验
  acl?: string[] // 权限控制，可以设置一组权限值
  aclMode?: 'allOf' | 'oneOf'
  diff?: boolean // diff 标志，在任务中，更新操作会使用
  tip?: string
}

export interface IBizInfoRow {
  img?: string
  title: string
  columns: IBaseInfoColumn[]
}
